home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The X-Philes (2nd Revision)
/
The X-Philes Number 1 (1995).iso
/
xphiles
/
hp48hor1
/
disd.src
< prev
next >
Wrap
Text File
|
1991-02-21
|
13KB
|
539 lines
%%HP: T(3)A(D)F(.);
@ Saturn Disassembler package
@ by Kevin Pryor;
@ improvements by John Gilbert.
DIR
DISR
\<< HEX
CASE DUP TYPE 10 ==
THEN DUP 'ADDR' STO PKS
END DUP TYPE 12 ==
THEN ODMP
IF DUP SIZE DUP 16 <
THEN ADDR + PKS +
ELSE DROP
END
END
END \-> ob
\<< ob DIS SWAP PCAD SWAP \-> code ob2
\<< code ADDR B2S \->TAG ob2 ob SIZE ob2 SIZE - ADDR + 'ADDR' STO
'ODMP' STO
\>>
\>>
\>>
DISJ
\<< ADRJ DISR
\>>
PKS
\<< "000000000000000" SWAP PEEK B2S + RVRS 1 16 SUB
\>>
DIS
\<< HEX \-> m
\<< m 2 1000 SUB {
\<< O0
\>>
\<< O1
\>>
\<< "MOVE.1 " m 2 2 SUB + ",P" + CUT1
\>>
\<< m 2 2 SUB XTON \-> i
\<< "MOVE.P" i 1 + R\->B B2S + " " + m 3 3 i + SUB RVRS + ",C" +
i 2 + CUTX
\>>
\>>
\<< "BRCS PC" m 2 3 SUB DUP
CASE "20" ==
THEN DROP2 "NOP3"
END DUP "00" ==
THEN DROP2 "RETCS"
END RVRS 1 PCA +
END CUT2
\>>
\<< "BRCC PC" m 2 3 SUB
IF DUP "00" ==
THEN DROP2 "RETCC"
ELSE RVRS 1 PCA +
END CUT2
\>>
\<< "JUMP.3 PC" m 2 4 SUB DUP
CASE "300" ==
THEN DROP2 "NOP4"
END m 2 5 SUB "4000" ==
THEN DROP2 "NOP5" CUT1
END RVRS 1 PCA +
END CUT3
\>>
\<< "CALL.3 PC" m 2 4 SUB RVRS 4 PCA + CUT3
\>>
\<< O8
\>>
\<< m
IF m 2 2 SUB "8" <
THEN OTT
ELSE OZZ
END CUT4
IF DUP 1 2 SUB "BR" == m 4 5 SUB "00" == AND
THEN DUP ",PC" POS 1 - 3 SWAP SUB "RET" SWAP +
END
\>>
\<< m 2 2 SUB
IF DUP "8" <
THEN T2F m 3 3 SUB OKK
ELSE XTON 8 - \->STR T2F m 3 3 SUB OPP
END CUT2
\>>
\<< m 2 2 SUB
IF DUP "8" <
THEN T2F m 3 3 SUB OQQ
ELSE XTON 8 - \->STR T2F m 3 3 SUB ORR
END CUT2
\>>
\<< "A" m 2 2 SUB OKK CUT1
\>>
\<< "A" m 2 2 SUB OPP CUT1
\>>
\<< "A" m 2 2 SUB OQQ CUT1
\>>
\<< "A" m 2 2 SUB ORR CUT1
\>> } m 1 1 SUB XTOM GET EVAL SWAP
\>>
\>>
ADDR # 1FCCh
ADRJ # 1FC6h
ODMP "8576310857660084785285680C"
PEEK
\<< B\->R R\->B Code
\>>
RVRS @ [replaced with Derek Nickel's REV machine-code! -jkh-]
\<< \-> s
\<< "" s SIZE 1
FOR x s x x SUB + -1
STEP
\>>
\>>
S2B
\<< "#" SWAP +STR\->
\>>
B2S
\<< \->STR DUP SIZE1 - 3 SWAP SUB
\>>
PCA
\<< \-> s n
\<<
IF s 1 1SUB "7" >
THEN "-" 16s SIZE ^ s S2B - n- B2S +
ELSE "+" sS2B n + B2S +
END
\>>
\>>
XTON
\<< "#" SWAP +STR\-> B\->R
\>>
O8
\<< \-> m
\<< m 2 1000SUB {
\<< O80
\>>
\<< O81
\>>
\<< "CLRB " m 2 2 SUB X2D + CUT1
\>>
\<< "BRBC " m 2 2 SUB X2D + ",PC" + m 3 4 SUB RVRS 3 PCA + CUT3
\>>
\<< "CLRB " m 2 2 SUB + ",ST" + CUT1
\>>
\<< "SETB " m 2 2 SUB + ",ST" + CUT1
\>>
\<< "BRBC " m 2 2 SUB + ",ST,PC" + m 3 4 SUB RVRS 3 PCA + CUT3
\>>
\<< "BRBS " m 2 2 SUB + ",ST,PC" + m 3 4 SUB RVRS 3 PCA + CUT3
\>>
\<< "BRNE.1 P," m 2 2 SUB + ",PC" + m 3 4 SUB RVRS 3 PCA + CUT3
\>>
\<< "BREQ.1 P," m 2 2 SUB + ",PC" + m 3 4 SUB RVRS 3 PCA + CUT3
\>>
\<< "8" m + OTT CUT3
\>>
\<< "8" m + OZZ CUT3
\>>
\<< "JUMP.4 PC" m 2 5 SUB RVRS 2 PCA + CUT4
\>>
\<< "JUMP.A " m 2 6 SUB RVRS DUP S2B 'ADRJ' STO + CUT5
\>>
\<< "CALL.4 PC" m 2 5 SUB RVRS 6 PCA + CUT4
\>>
\<< "CALL.A " m 2 6 SUB RVRS DUP S2B 'ADRJ' STO + CUT5
\>> } m 1 1 SUB XTOM GET EVAL
IF DUP 1 2 SUB "BR" == m 3 4 SUB "00" == AND
THEN DUP ",PC" POS 1 - 3 SWAP SUB "RET" SWAP +
END
\>>
\>>
OZZ
\<< \-> m
\<< { "BRGT." "BRLT." "BRGE." "BRLE." } m 3 3 SUB XTON 4 / IP 1 + GET
m 1 2 SUB TT2F + " " + m 3 3 SUB W2D + "," + m 3 3 SUB W2D2 + ",PC"
+ m 4 5 SUB RVRS 3 PCA +
\>>
\>>
OTT
\<< \-> m
\<< { "BREQ." "BRNE." "BRZ." "BRNZ." } m 3 3 SUB XTON 4 / IP 1 + GET
m 1 2 SUB TT2F + " " + m 3 3 SUB W2D +
IF m 3 3 SUB DUP "8" <
THEN W2D2 "," SWAP + +
ELSE DROP
END ",PC" + m 4 5 SUB RVRS 3 PCA +
\>>
\>>
O808
\<< \-> m
\<< m 2 1000 SUB { "INTON"
\<<
IF m 2 2 SUB "0" ==
THEN "RSI"
ELSE ""
END CUT1
\>>
\<< m 2 2 SUB STR\-> \-> i
\<< "MOVE.P" i 1 + \->STR + " " + m 3 3 i + SUB RVRS + ",A" + i 2 +
CUTX
\>>
\>> "BUSCB"
\<< "CLRB " m 2 2 SUB + ",A" + CUT1
\>>
\<< "SETB " m 2 2 SUB + ",A" + CUT1
\>>
\<< "BRBC " m 2 2 SUB + ",A,PC" + m 3 4 SUB RVRS 5 PCA + CUT3
\>>
\<< "BRBS " m 2 2 SUB + ",A,PC" + m 3 4 SUB RVRS 5 PCA + CUT3
\>>
\<< "CLRB " m 2 2 SUB + ",C" + CUT1
\>>
\<< "SETB " m 2 2 SUB + ",C" + CUT1
\>>
\<< "BRBC " m 2 2 SUB + ",C,PC" + m 3 4 SUB RVRS 5 PCA + CUT3
\>>
\<< "BRBS " m 2 2 SUB + ",C,PC" + m 3 4 SUB RVRS 5 PCA + CUT3
\>>
"JUMP.A @A" "BUSCD" "JUMP.A @C" "INTOFF" } m 1 1 SUB XTOM GET EVAL
IF DUP 1 2 SUB "BR" == m 3 4 SUB "00" == AND
THEN 3 8 SUB "RET" SWAP +
END
\>>
\>>
Z2SD
\<< XTOM { "" "" "" "" "B,A" "C,B" "A,C" "C,D" "A,B" "B,C" "C,A" "D,C" }
SWAP GET
\>>
OQQ
\<< \-> m
\<<
CASE m "B" >
THEN "SUBN." SWAP + " " + m XTON 4 MOD \->STR X2SD +
END m "3" > m "8" < AND
THEN "INC." SWAP + " " + m XTON 4 MOD \->STR W2D +
END "SUB." SWAP + " " + m X2SD +
END
\>>
\>>
OPP
\<< \-> m
\<<
CASE m "4" <
THEN "CLR." SWAP + " " + m W2D +
END m "B" >
THEN "SWAP." SWAP + " " + m XTON 4 MOD \->STR X2SD +
END "MOVE." SWAP + " " + m Z2SD +
END
\>>
\>>
X2D
\<< "#" SWAP + STR\-> \-> n
\<< ""
IF n # 1h AND B\->R
THEN "XM," +
END
IF n # 2h AND B\->R
THEN "SB," +
END
IF n # 4h AND B\->R
THEN "SR," +
END
IF n # 8h AND B\->R
THEN "MP," +
END DUP SIZE 1 - 1 SWAP SUB
\>>
\>>
O0
\<< \-> m
\<< m 2 1000 SUB { "RETSETXM" "RET" "RETSETC" "RETCLRC" "SETHEX"
"SETDEC" "PUSH.A C" "POP.A C" "CLR.X ST" "MOVE.X C,ST" "MOVE.X ST,C"
"SWAP.X C,ST" "INC.1 P" "DEC.1 P"
\<< O0E
\>> "RETI" } m 1 1 SUB XTOM GET EVAL
\>>
\>>
X2SD
\<< XTOM { "B,A" "C,B" "A,C" "C,D" "A,A" "B,B" "C,C" "D,D" "A,B" "B,C"
"C,A" "D,C" } SWAP GET
\>>
OKK
\<< \-> m
\<<
IF m "C" <
THEN "ADD." SWAP + " " + m X2SD +
ELSE "DEC." SWAP + " " + m W2D +
END
\>>
\>>
ORR
\<< \-> m
\<<
CASE m "4" <
THEN "SLN." SWAP + " " + m W2D +
END m "8" <
THEN "SRN." SWAP + " " + m W2D +
END m "C" <
THEN "NEG." SWAP + " " + m W2D +
END "NOT." SWAP + " " + m W2D +
END
\>>
\>>
TT2F
\<<
IF 1 2 SUB DUP "90" <
THEN DROP "A"
ELSE XTON 8 MOD \->STR T2F
END
\>>
W2D2
\<< XTON 4 MOD 1 + { "B" "C" "A" "C" } SWAP GET
\>>
O81B
\<< \-> m
\<< m 2 1000 SUB { "" "" "JUMP.A A" "JUMP.A C" "MOVE.A. PC,A"
"MOVE.A PC,C" "SWAP.A A,PC" "SWAP.A C,PC" } m 1 1 SUB XTOM GET EVAL
\>>
\>>
O81A
\<< \-> m
\<< m 4 1000 SUB { "MOVE." "SWAP." } m 2 2 SUB "2" == 1 + GET m 1 1 SUB
T2F + " " +
IF m 3 3 SUB DUP "8" <
THEN "A"
ELSE "C"
END SWAP J2R
IF "1" m 2 2 SUB ==
THEN SWAP
END "," SWAP + + +
\>>
\>>
J2R
\<< XTON 8 MOD \->STR "R" SWAP +
\>>
W2D
\<< XTON 4 MOD 65 + CHR
\>>
T2F
\<< { "P" "WP" "XS" "X" "S" "M" "B" "W" "" "" "" "" "" "" "" "A" } SWAP
XTOM GET
\>>
O81
\<< \-> m
\<< m 2 1000 SUB { "RLN.W A" "RLN.W B" "RLN.W C" "RLN.W D" "RRN.W A"
"RRN.W B" "RRN.W C" "RRN.W D"
\<<
IF m 3 3 SUB "4" <
THEN "ADD."
ELSE "SUB."
END m 2 2 SUB T2F + " " + m 4 4 SUB XINC + "," + m 3 3 SUB W2D + CUT3
\>>
\<< "SRB." m 2 2 SUB T2F + " " + m 3 3 SUB W2D + CUT2
\>>
\<< O81A
\>>
\<< O81B
\>> "SRB.W A" "SRB.W B" "SRB.W C" "SRB.W D" } m 1 1 SUB XTOM GET EVAL
\>>
\>>
O80
\<< \-> m
\<< m 2 1000 SUB { "OUT.S C" "OUT.X C" "IN.4 A" "IN.4 C" "UNCNFG"
"CONFIG" "MOVE.A ID,C" "SHUTDN"
\<< O808
\>> "ADD.A P+1,C" "RESET" "BUSCC"
\<< "MOVE.1 P,C," m 2 2 SUB + CUT1
\>>
\<< "MOVE.1 C," m 2 2 SUB + ",P" + CUT1
\>> "SREQ"
\<< "SWAP.1 P,C," m 2 2 SUB + CUT1
\>> } m 1 1 SUB XTOM GET EVAL
\>>
\>>
O1
\<< \-> m
\<< m 2 1000 SUB {
\<< O10
\>>
\<< O11
\>>
\<< O12
\>>
\<< O13
\>>
\<< O14
\>>
\<< O15
\>>
\<< "ADD.A " m 2 2 SUB XINC + ",D0" + CUT1
\>>
\<< "ADD.A " m 2 2 SUB XINC + ",D1" + CUT1
\>>
\<< "SUB.A " m 2 2 SUB XINC + ",D0" + CUT1
\>>
\<< "MOVE.2 " m 2 3 SUB RVRS + ",D0" + CUT2
\>>
\<< "MOVE.4 " m 2 5 SUB RVRS + ",D0" + CUT4
\>>
\<< "MOVE.5 " m 2 6 SUB RVRS + ",D0" + CUT5
\>>
\<< "SUB.A " m 2 2 SUB XINC + ",D1" + CUT1
\>>
\<< "MOVE.2 " m 2 3 SUB RVRS + ",D1" + CUT2
\>>
\<< "MOVE.4 " m 2 5 SUB RVRS + ",D1" + CUT4
\>>
\<< "MOVE.5 " m 2 6 SUB RVRS + ",D1" + CUT5
\>> } m 1 1 SUB XTOM GET EVAL
\>>
\>>
XADD
\<< "#" ROT + STR\-> + \->STR DUP SIZE 1 - 3 SWAP SUB
\>>
CUT3
\<< SWAP 4 1000 SUB SWAP
\>>
XINC
\<< "#" SWAP + STR\-> 1 + \->STR DUP SIZE 1 - 3 SWAP SUB
\>>
CUTX
\<< ROT SWAP 1 + 1000 SUB SWAP
\>>
O15
\<< \-> m
\<< m 3 1000 SUB "MOVE." m 2 2 SUB m 1 1 SUB
IF "8" <
THEN { "P" "WP" "XS" "X" "S" "M" "B" "W" } SWAP XTOM GET +
ELSE XINC +
END " " + m 1 1 SUB O14X +
\>>
\>>
CUT5
\<< SWAP 6 1000 SUB SWAP
\>>
CUT4
\<< SWAP 5 1000 SUB SWAP
\>>
CUT2
\<< SWAP 3 1000 SUB SWAP
\>>
CUT1
\<< SWAP 2 1000 SUB SWAP
\>>
O12
\<< \-> m
\<< m 2 1000 SUB "SWAP.W " m 1 1 SUB DUP
IF "8" <
THEN "A,"
ELSE "C,"
END SWAP O10X + +
\>>
\>>
O10
\<< \-> m
\<< m 2 1000 SUB "MOVE.W " m 1 1 SUB DUP
IF "8" <
THEN "A,"
ELSE "C,"
END SWAP O10X + +
\>>
\>>
O14X
\<< XTOM DUP
IF 8 >
THEN 8 -
END { "A,@D0" "A,@D1" "@D0,A" "@D1,A" "C,@D0" "C,@D1" "@D0,C" "@D1.C" }
SWAP GET
\>>
O14
\<< \-> m
\<< m 2 1000 SUB m 1 1 SUB DUP
IF "8" <
THEN "MOVE.A "
ELSE "MOVE.B "
END SWAP O14X +
\>>
\>>
O13
\<< \-> m
\<< m 2 1000 SUB { "MOVE.A A,D0" "MOVE.A A,D1" "SWAP.A A,D0"
"SWAP.A A,D1" "MOVE.A C,D0" "MOVE.A C,D1" "SWAP.A C,D0" "SWAP.A C,D1"
"MOVE.4 A,D0" "MOVE.4 A,D1" "SWAP.4 A,D0" "SWAP.4 A,D1" "MOVE.4 C,D0"
"MOVE.4 C,D1" "SWAP.4 C,D0" "SWAP.4 C,D1" } m 1 1 SUB XTOM GET
\>>
\>>
O11
\<< \-> m
\<< m 2 1000 SUB "MOVE.W " m 1 1 SUB DUP O10X SWAP
IF "8" <
THEN ",A"
ELSE ",C"
END + +
\>>
\>>
O10X
\<< XTON DUP
IF 7 >
THEN 8 -
END \->STR "R" SWAP +
\>>
O0EXP
\<< 1 1 SUB XTON
IF 8 <
THEN "AND."
ELSE "OR."
END
\>>
O0EXS
\<< 1 1 SUB XTOM DUP
IF 8 >
THEN 8 -
END { " B,A" " C,B" " A,C" " C,D" " A,B" " B,C" " C,A" " D,C" } SWAP GET
\>>
O0E
\<< \-> m
\<< m 3 1000 SUB m 2 1000 SUB DUP O0EXS SWAP O0EXP { "P" "WP" "XS" "X"
"S" "M" "B" "W" "" "" "" "" "" "" "" "A" } m 1 1 SUB XTOM GET + SWAP +
\>>
\>>
XTOM
\<< "#" SWAP + STR\-> 1 + B\->R
\>>
PCAD
\<< \-> s
\<<
CASE s "PC+" POS DUP
THEN \-> n
\<< s 1 n 1 - SUB s n 3 + 1000 SUB S2B ADDR + DUP 'ADRJ' STO B2S +
\>>
END DROP s "PC-" POS DUP
THEN \-> n
\<< s 1 n 1 - SUB ADDR s n 3 + 1000 SUB S2B - DUP 'ADRJ' STO B2S +
\>>
END DROP s
END
\>>
\>>
END